package practica1.actions;

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import practica1.controller.Controller;
import practica1.language.Language;
import practica1.language.LanguageEvent;
import practica1.language.LanguageListener;
import practica1.logic.LogicPoblacion;

/**
 * Clase que implementa la acción para borrar una población
 * @author Miguel Gonzalez - Ceura
 */
public class ActionBorrarPoblacion extends AbstractAction implements LanguageListener {

    private LogicPoblacion poblacion;
    
    /**
     * Constructor de la clase
     */
    public ActionBorrarPoblacion() {
        super(Language.getI().getP("BORRAR"), null);
        
        poblacion = null;
        
        putValue(SHORT_DESCRIPTION, Language.getI().getP("BORRAR_POBLACION"));
        putValue(NAME, Language.getI().getP("BORRAR"));
        putValue(SELECTED_KEY, Boolean.TRUE);
        
        initIdiomaListener();
    }
    
    private void initIdiomaListener() {
        Language.getI().addLanguageListener(this);        
    }
    
    /**
     * Constructor de la clase que asocia la acción a una determinada población
     * @param poblacion 
     */
    public ActionBorrarPoblacion(LogicPoblacion poblacion) {
        super(Language.getI().getP("BORRAR"), null);

        this.poblacion = poblacion;
        
        putValue(SHORT_DESCRIPTION, Language.getI().getP("BORRAR_POBLACION"));
        putValue(NAME, Language.getI().getP("BORRAR"));
        putValue(SELECTED_KEY, Boolean.TRUE);
        
        initIdiomaListener();
    }
    
    /**
     * Cuando sucede la acción nos encargamos de borrar la población que esté
     * seleccionada o bien, si la acción está asociada a una determinada población,
     * borramos esa población.
     * @param e ActionEvent Evento producido
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        if(poblacion != null) {
            Controller.getInstance().removePoblacion(poblacion);
        } else {
            Controller.getInstance().removePoblacion(Controller.getInstance().
                getPoblacionSeleccionada());            
        }
    }

    /**
     * Al cambiar el idioma actualizamos el nombre y la descripción
     * @param evt LanguageEvent
     */
    @Override
    public void idiomaChange(LanguageEvent evt) {
        putValue(SHORT_DESCRIPTION, Language.getI().getP("BORRAR_POBLACION"));
        putValue(NAME, Language.getI().getP("BORRAR"));
    }
}
